package com.tuantuan.common.utils;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.text.DateFormat;

/**
 * @author Yorking
 * @date 2019/05/08
 */
public class JsonUtils {

    /**
     * private static DateFormat yyyyMMdd = DateFormat.getDateInstance();
     * private static DateFormat HHmmss = DateFormat.getTimeInstance();
     * //显示日期，周，上下午，时间（精确到秒）
     * //2017年4月16日 星期日 下午12时43分37秒 CST
     * private static DateFormat dateFormatWeek = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
     * //显示日期,上下午，时间（精确到秒）
     * //2017年4月16日 下午12时43分37秒
     * private static DateFormat dateFormatFour = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
     * //显示日期,上下午，时间（精确到秒）
     * //2017年4月16日 下午12时43分37秒
     * private static DateFormat dateFormatOne = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.CHINA);
     * //显示日期，上下午,时间（精确到分） 17-4-16 下午12:43
     * private static DateFormat dateFormatTwo = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
     * //显示日期，时间（精确到秒） 2017-4-16 12:43:37
     * private static DateFormat dateFormatThree = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
     */

    private static ObjectMapper objectMapper = new ObjectMapper();
    private static DateFormat yyyyMMddHHmmss = DateFormat.getDateTimeInstance();


    static {
        objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
        objectMapper.setDateFormat(yyyyMMddHHmmss);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    }

    public static <T> T parse(String value, Class<T> clazz) {
        try {
            return objectMapper.readValue(value.getBytes(), clazz);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String toJsonString(Object value) {
        try {
            return objectMapper.writeValueAsString(value);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}
